<?php

$m = Model::getInstance();

// Pagina a mostrar, tiene a que sitio pertenece
$page = $m->get('page');

$layout = Layout::getActive();

// Para cargar los modulos, necesito las clases del modelo de modulos cargados,
// como a priori no se cuales tengo que cargar, necesitaria cargar todas las clases.
// Por ahora cargo todo y luego veo como cargar solo el modelo del cms2.
YuppLoader::loadModel(); // Carga todo el Model de la aplicacion CMS

?>
<html>
  <head>
    <!-- TODO: el estilo dependera del layout seleccionado -->
    <style>
      /* Global, es el menu para editar lo que se esta viendo */
      #topbar {
        height: 170px;
      }
      /* Es necesario mover el contenido de las zonas para abajo,
         tanto como la altura de la topbar cuando la topbar es visible,
         o sea, cuando esta en modo edicion.
         De lo contrario, las zonas tapan la topbar.
      */
      
      /* Para mostrar pantallas modales */
      #modal {
        display: none;
        /* opacity: 0.0; */
        padding: 0px;
        z-index: 1000;
        /* width: 0px; */
        /* height: 0px; */
        /* overflow: auto; */
        position: absolute;
      }
      #modal iframe {
        background-color: #66aacc;
        border: 0px;
        /* width: 0px; */
        /* height: 0px; */
      }
    </style>
    <?php echo h('js', array('app'=>'cms2', 'name'=>'jquery/jquery-1.5.1.min')); ?>
    
    <!-- solo para MenuModule, es necesario para el show con menues desplegables -->
    <?php echo h('js', array('app'=>'cms2', 'name'=>'superfish-1.4.8/js/jquery.hoverIntent.min')); ?><!-- Para que no dispare onmouseover en seguida, espera que el mouse se detenga arriba para dispararlo. -->
    <?php echo h('js', array('app'=>'cms2', 'name'=>'superfish-1.4.8/js/superfish')); ?>
    
    <?php echo h('js', array('app'=>'cms2', 'name'=>'ModuleObjectCache')); ?>
    
    <script type="text/javascript">
    
      // ----------------------------------------------------
      // Cache de objetos JS que los modulos pueden necesitar en
      // algun momento para mostrarse correctamente.
      var cache = new ModuleObjectCache();
    
      $(document).ready( function() {
        
        // Hace que los menus sean desplegables
        // FIXED: si modifico el contenido de un menu, en la actualizacion, no se aplica el superfish sobre los botones con subpaginas.
        $('ul.menu').superfish();
      });
      
    </script>
    
    <?php
      $pageZoneIds = '';
      foreach ( $layout->getZones() as $zone ) $pageZoneIds .= '#'.$zone->getName().', ';
      $pageZoneIds = substr($pageZoneIds, 0, -2);
    ?>
  </head>
  <body>
  
    <!-- feedback podria ser un modulo por defecto, ahi se imprimen los feedbasck y errores -->
    <!-- tambien, cada modulo podria tener su propio feedback para sus mensajes -->
    <?php if ($m->flash('message')) { ?>
      <div class="flash"><?php echo $m->flash('message'); ?></div>
    <?php } ?>

    <?php $zoneContent = array(); ?>
    <?php foreach ( $layout->getZones() as $zone ): ?>
      <?php
      $pageZone = PageZone::getByPageAndName($page->getId(), $zone->getName());
      $zoneModules = array();
      if ($pageZone != NULL) $zoneModules = $pageZone->getModules();

      // =================================================================================
      // Agarro la salida para luego guardarla en $zoneContent
      ob_start();
      ?>
      <?php foreach ($zoneModules as $module) : ?>
        <!--
        FIXME: en modo edit, el container se deberia mostrar siempre
               porque muestra ademas las acciones de edicion. En modo show,
               no se deberian mostrar las acciones.
               
               En realidad los modos se determinan por si un ususario esta
               logueado o no, y que permisos tiene el usuario. p.e. si esta
               logueado y no es editor, entonces no estara en modo edit.
        -->
        <?php if ($module->getShowContainer()) : ?>
          <!--
            el id de esta tag es lo que se usara para guardar el nuevo orden
            luego de hacer un movimiento por sortable, de un modulo a otra
            zona, o reordenando un modulo en la misma zona.
          -->
          <div class="moduleContainer <?php echo $module->getClass(); ?>" id="<?php echo $module->getClass(); ?>__<?php echo $module->getId(); ?>"><!-- TODO: discutir si tengo que mostrar el container o no. -->
            <div class="moduleTopBar">
              <?php echo $module->getTitle(); ?>
              <!--
              <div class="moduleActions">
                <a href="<?php echo h('url', array('action'=>'editModule', 'class'=>$module->getClass(), 'id'=>$module->getId(), 'pageId'=>$page->getId())); ?>" alt="configuracion"><?php echo h('img', array('app'=>'cms2', 'src'=>'settings.gif')); ?></a>
                <a href="<?php echo h('url', array('action'=>'removeModule', 'class'=>$module->getClass(), 'moduleId'=>$module->getId(), 'pageId'=>$page->getId())); ?>" alt="remover"><?php echo h('img', array('app'=>'cms2', 'src'=>'delete.gif')); ?></a>
              </div>
              -->
            </div>
            <div class="moduleContent <?php echo $module->getClass(); ?>">
              <?php Helpers::template(array('controller' => strtolower($module->getClass()), // es el tipo de modulo, como news o html
                                      'name' => 'displayModule',
                                      'args' => array('module'=>$module, 'page'=>$page, 'mode'=>'show') // podria pasarle mas cosas como page, pageZone, etc.
                                     )); ?>
            </div>
          </div>
        <?php else : ?>
          <div class="moduleContent <?php echo $module->getClass(); ?>">
            <?php Helpers::template(array('controller' => strtolower($module->getClass()), // es el tipo de modulo, como news o html
                                    'name' => 'displayModule',
                                    'args' => array('module'=>$module, 'page'=>$page, 'mode'=>'show') // podria pasarle mas cosas como page, pageZone, etc.
                                   )); ?>
          </div>
        <?php endif; ?>
      <?php endforeach; ?>
      <?php
      // Contenido de la zona actual
      $content = ob_get_clean();
      $zoneContent[$zone->getName()] = $content;
      // =================================================================================
      ?>
    <?php endforeach; ?>
      
    <?php
      $zoneContent['page'] = $page; // Le agrego la pagina actual a los params del template.
      // TODO: el modulo Menu y la muestra de las subpaginas, debe tambien considerar que estoy en modo read only, y generar los links acordes, no al modo edit.
      $zoneContent['mode'] = 'show';
    
      // Se incluye el template correspondiente a la skin para que muestre el contenido como quiera
      // En args podria pasarle mas cosas como page, pageZone, etc.
      Helpers::template(array('name' => 'layout',
                              'path' => '../../skins/'.$layout->getName(),
                              'args' => $zoneContent )); 
    ?>
  </body>
</html>